package com.gxa.jjty.core.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @ClassName JsonUtil
 * @Author: ws
 * @date 2021/11/29 16:37
 */
public class JsonUtil {

    /**
     * 声明jackson的核心操作对象: ObjectMapper
     */
    private static ObjectMapper objectMapper = null;

    // 静态代码快实例Jackson核心操作对象: ObjectMapper
    static {
        objectMapper = new ObjectMapper();
    }

    /**
     * 对象转换为json字符串的方法
     * @param object 目标对象
     * @return json字符串
     */
    public static String objectToString(Object object){
        String jsonString = null;
        try {
            // 通过writeValueAsString方法把user对象转为json字符串
            jsonString = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            //TODO 工具类的异常也应该记录在系统日志中
            //log.error(e);
        }
        return jsonString;
    }

    /**
     * string转换为指定对象的方法
     * @param jsonString 需要转换的json字符串
     * @param clazz 目标对象的Class类型
     * @param <T> 泛型
     * @return 擦除后的泛型对象
     */
    public static <T> T stringToObject(String jsonString,Class<T> clazz){
        T t = null;
        try {
            // 通过readValue方法把json转为user对象
            t = objectMapper.readValue(jsonString, clazz);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            // 工具类的异常也应该记录在系统日志中
            //log.error(e);
        }
        return t;
    }

//    public static Map objectToMap(Object o){
//        Map map=null;
//        try {
//            map = objectMapper.readValue(objectToString(o), Map.class);
//        } catch (JsonProcessingException e) {
//            e.printStackTrace();
//        }
//        return map;
//    }
}
